#ifndef FEDOMPRIVATE_H
#define FEDOMPRIVATE_H
#include "fedom.h"
#include <QHash>

struct FeDOMDocumentData;

struct FeDOMNodeData {
	virtual ~FeDOMNodeData() {} // DO NOT REMOVE, MUST BE VISTUAL
	unsigned ref_count;
	FeDOMNode::NodeType node_type;
	FeDOMDocumentData *doc;
};

struct FeDOMPropertyData: FeDOMNodeData {
	QString name;
	QVariant value;
};

struct FeDOMSignalBindData: FeDOMNodeData {
	FeActualDataId signal;
	QString widget;
	QString property;
};

struct FeDOMSignalBindingData: FeDOMNodeData {
	QList<FeDOMSignalBind> bindings;
};

struct FeDOMLayoutItemData: FeDOMNodeData {
};

struct FeDOMWidgetData: FeDOMLayoutItemData {
	QString name;
	QString type;
	QHash<QString, FeDOMProperty> properties;
};

struct FeDOMLayoutData: FeDOMLayoutItemData {
	QList<FeDOMLayoutItem> items;
};

struct FeDOMVBoxLayoutData: FeDOMLayoutData {
	int margin;
	int spacing;
};

struct FeDOMHBoxLayoutData: FeDOMLayoutData {
	int margin;
	int spacing;
};

struct FeDOMScaleLayoutData: FeDOMLayoutData {
	QSize size;
};

struct FeDOMScreenData: FeDOMNodeData {
	FeDOMLayout layout;
	QHash<QString,FeDOMProperty> properties;
	FeDOMSignalBinding binding;
};

struct FeDOMDocumentData: FeDOMNodeData {
	FeDOMScreen screen;
};

struct FeDOMNodePrivate {
	FeDOMNodeData *data;
};

#endif // FEDOMPRIVATE_H